Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by www.netzwerkartist.de...

 <<   zurück
Visual Basic 2005 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual Basic 2005

Visual Basic 2005
1.233 S., mit 2 CDs, 59,90 Euro
Galileo Computing
ISBN 3-89842-585-1
gp Kapitel 17 Standarddialoge programmieren
  gp 17.1 Einführung in die Standarddialoge
    gp 17.1.1 Das Öffnen eines Standarddialogs
  gp 17.2 Die Klasse »OpenFileDialog«
    gp 17.2.1 Die Beschriftung der Titelleiste
    gp 17.2.2 Festlegen eines Standardverzeichnisses
    gp 17.2.3 Die Klasse »Environment«
    gp 17.2.4 Einen Dateifilter setzen
    gp 17.2.5 Die ausgewählte Datei
    gp 17.2.6 Mehrfachauswahl von Dateien
    gp 17.2.7 Zusammenfassung der Eigenschaften und Methoden
    gp 17.2.8 Ereignisse von »OpenFileDialog«
    gp 17.2.9 Das Beispiel »Texteditor«
  gp 17.3 Die Klasse »SaveFileDialog«
    gp 17.3.1 Der Speichern-Dialog am Beispiel »TexteditorVers2«
  gp 17.4 Der Dialog »FolderBrowserDialog«
  gp 17.5 Die Klasse »ColorDialog«
  gp 17.6 Die Klasse »FontDialog«


Galileo Computing

17.2 Die Klasse »OpenFileDialog«  downtop

OpenFileDialog repräsentiert das Dialogfenster, in dem der Anwender zur Laufzeit die Datei auswählen kann, die er öffnen möchte. Die Klasse hat nur einen parameterlosen Konstruktor. Das macht es uns leicht, die Klasse zu instanziieren und anzeigen zu lassen.


Dim dlgFileOpen As New OpenFileDialog
dlgFileOpen.ShowDialog()

Die beiden Anweisungen, die beispielsweise im Ereignishandler des Click-Ereignisses einer Schaltfläche codiert werden können, bewirken das Öffnen des in der folgenden Abbildung gezeigten Dialogfensters. Dieses ist voll funktionsfähig, denn man kann im Anzeigebereich durch das Dateisystem zu der Datei navigieren, die geöffnet werden soll. Sollten Sie aber glauben, dass nach dem Klicken auf die Schaltfläche die ausgewählte Datei auch tatsächlich geöffnet wird, werden Sie enttäuscht sein: Geöffnet wird mit diesem Dialog tatsächlich keine Datei, sie wird nur ausgewählt.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 17.1     Der Standarddialog »OpenFileDialog«

Sowohl das Layout als auch das Verhalten eines OpenFileDialog-Fensters kann in einem bestimmten Rahmen an anwendungsspezifische Forderungen angepasst werden. Die Möglichkeiten der Einflussnahme wollen wir uns nun etwas genauer ansehen.


Galileo Computing

17.2.1 Die Beschriftung der Titelleiste  downtop

Standardmäßig wird in der Titelleiste des Dialogs die Beschriftung Öffnen angezeigt. Sie können den Titel mit der Eigenschaft Title beliebig festlegen, beispielsweise um anzuzeigen, welcher Dateityp geöffnet werden soll, oder auch, um den Namen der eigenen Anwendung in die Anzeige mit aufzunehmen.

Diese Einstellung können Sie entweder im Eigenschaftsfenster des OpenFileDialog-Objekts vornehmen oder im Programmcode die notwendigen Anweisungen formulieren:


Dim dlgFileOpen As New OpenFileDialog
dlgFileOpen.Titel = "Öffnen eines Projektordners"
dlgFileOpen.ShowDialog()


Galileo Computing

17.2.2 Festlegen eines Standardverzeichnisses  downtop

Wird der Dialog zum Öffnen einer Datei zum ersten Mal angezeigt, wird der Inhalt des Ordners angezeigt, in dem sich die ausführbare Datei befindet. Beim nächsten Öffnen ist es immer das Verzeichnis, aus dem heraus zuvor eine Datei ausgewählt worden ist. Das Dialogfenster nutzt dazu Informationen aus der Registrierungsdatenbank.. Das Verhalten kann beeinflusst werden, indem man die Eigenschaft InitialDirectory auf ein bestimmtes Verzeichnis festlegt oder eine entsprechende Anweisung codiert, bevor der Dialog geöffnet wird:


dlgFileOpen.InitialDirectory = "C:\MyProjects"
dlgFileOpen.ShowDialog()

Wenn Sie keinen Wert festlegen, enthält die Eigenschaft einen Leerstring.

Eine fixe Pfadangabe wie im Beispiel zu codieren, wird fatale Folgen haben, wenn der angegebene Ordner auf dem Rechner des Anwenders nicht existiert. Besser ist es, den Pfad zu dem Ordner anzugeben, in dem sich die ausführbare Datei der aktuellen Anwendung befindet. Dazu wird im Programmcode der Rückgabewert der Methode StartUpPath der Klasse Application der Eigenschaft InitialDirectory zugewiesen:


dlgFileOpen.InitialDirectory = Application.StartupPath
dlgFileOpen.ShowDialog()


Galileo Computing

17.2.3 Die Klasse »Environment«  downtop

Möglicherweise benötigen Sie aber eine andere Pfadangabe, beispielsweise den Pfad zu einem systemspezifischen Verzeichnis. Um die notwendigen Informationen über die Umgebung der aktuellen Maschine zu erhalten, können Sie auf die Dienste der Klasse Environment der .NET-Klassenbibliothek zurückgreifen.

Die Klasse Environment ist im Namespace System definiert und veröffentlicht Eigenschaften und Methoden, die zum Abrufen von maschinenspezifischen Informationen nützlich sind, beispielsweise die statische Methode GetFolderPath, die den Pfad eines bestimmten Systemordners abruft:


Public Shared Function GetFolderPath(folder As SpecialFolder) As String

Die Methode erwartet als Argument einen Wert der Enumeration System.Environment.SpecialFolder. Um eine Vorstellung davon zu bekommen, welche Systemordner durch Konstanten abgebildet werden, enthält die folgende Tabelle auszugsweise einige der in dieser Enumeration festgelegten Werte sowie deren Zuordnung. In der Spalte Rückgabewert finden die Standardinstallationsvorgaben Berücksichtigung, die in Abhängigkeit von der Installation variieren können. Um einen vollständigen Überblick über alle Mitglieder zu erhalten, sollten Sie in der .NET-Dokumentation nachsehen.


Tabelle 17.1     Konstanten der Enumeration »System.Environment.SpecialFolder« (Auszug)

Member Rückgabewert (Standardinstallationsvorgabe)
CommonProgramFiles C:\Programme\Gemeinsame Dateien

History

C:\Dokumente und Einstellungen\<User>\Lokale Einstellungen\Verlauf
Personal C:\Dokumente und Einstellungen\<User>\Eigene Dateien
ProgramFiles C:\Programme
Programs C:\Dokumente und Einstellungen\ <User>\ Startmenü\ Programme
Recent C:\Dokumente und Einstellungen\<User>\Recent
StartMenu C:\Dokumente und Einstellungen\<User>\Startmenü
Startup C:\Dokumente und Einstellungen\<User>\Startmenü \Programme\Autostart
System C:\WINNT\System32

Möchten Sie das zu öffnende Standardverzeichnis auf den Ordner


C:\Dokumente und Einstellungen\<User>\Eigene Dateien

festlegen, muss die Anweisung dazu wie folgt lauten:


dlgFileOpen.InitialDirectory = Environment.GetFolderPath( _
System.Environment.SpecialFolder.Personal)

Zwei weitere statische Methoden der Klasse Environment liefern Informationen zu den Umgebungsvariablen: Die Methode GetEnvironmentVariable gibt den Inhalt einer bestimmten Umgebungsvariable als Zeichenfolge zurück und die Methode GetEnvironmentVariables eine Auflistung vom Typ IDictionary, in der alle Umgebungsvariablen einschließlich ihrer Werte enthalten sind.


Public Shared Function GetEnvironmentVariables() As IDictionaryPPublic Shared Function GetEnvironmentVariable(String) As String

Der Einsatz der Methode GetEnvironmentVariables sehen Sie im folgenden Codefragment, das in einer Listbox alle Umgebungsvariablen samt deren Werte ausgibt.


Dim liste As IDictionary = Environment.GetEnvironmentVariables()
For Each temp As DictionaryEntry In liste
listBox1.Items.Add(temp.Key.ToString() & " = " _
& temp.Value.ToString())
Next

Die Liste der statischen Eigenschaften der Klasse Environment enthält unter anderem mit SystemDirectory und CurrentDirectory zwei Eigenschaften, deren Rückgabewert wir auch über andere Methoden erhalten. SystemDirectory hat denselben Rückgabewert wie die Methode GetFolderPath, der das Argument Environment.SpecialFolder.System übergeben wird, während CurrentDirectory identisch mit Application.StartupPath ist.


Galileo Computing

17.2.4 Einen Dateifilter setzen  downtop

Kehren wir nach unserem kleinen Ausflug zum Steuerelement OpenFileDialog zurück. Dessen Eigenschaft Filter legt die Dateitypen fest, die dem Anwender aus dem angezeigten Ordner zum Öffnen angeboten werden, z.  B.:


dlgFileOpen.Filter = "Textdateien (*.txt)|*.txt"

Welche Dateitypen gefiltert werden, kann der Anwender durch eine entsprechende Auswahl in einem Kombinationslistenfeld unterhalb des Anzeigebereichs bestimmen.

Die durch die Eigenschaft Filter beschriebene Zeichenfolge unterliegt einem strengen Muster. Die Anweisung oben definiert einen Dateifilter, ihr werden im Auswahlbereich des Dialogs nur Textdateien mit der Dateierweiterung .txt angeboten.

Die Zeichenfolge zur Festlegung eines Filters setzt sich immer aus zwei Teilen zusammen, die durch einen senkrechten Strich voneinander getrennt werden. Die Teilzeichenfolge links vom Strich wird dem Benutzer im Kombinationslistenfeld Dateityp angezeigt, die rechts vom Strich stehende Teilzeichenfolge ist die Anweisung an den Dialog, nach welchen Kriterien die Dateien gefiltert werden sollen. Das »*«-Zeichen dient als Platzhalter. Das Ergebnis der Anweisung sehen Sie in Abbildung 17.2.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 17.2     Die »Filter«-Option von »OpenFileDialog«

Soll das Kombinationslistenfeld mehrere Auswahloptionen anbieten, ergänzen Sie die Zeichenfolge der Filter-Eigenschaft nach dem bekannten Muster um die gewünschten Dateien. Zur Abgrenzung untereinander verwenden Sie ebenfalls einen senkrechten Strich.

Im folgenden Beispiel wird das Kombinationslistenfeld mit zwei Einträgen gefüllt: Der erste ist die Filterung nach Textdateien, die zweite Auswahloption zeigt sämtliche Dateien des geöffneten Ordners an.


dlgFileOpen.Filter = "Textdateien (*.txt)|*.txt|Alle Dateien (*.*)|*.*"

Wird zur Laufzeit der Anwendung die erste Auswahl getroffen, werden die TXT-Dateien herausgefiltert, entscheidet sich der Anwender für die zweite, werden alle Dateien, unabhängig von der Dateierweiterung, angezeigt.

Die im Kombinationslistenfeld angebotene Liste kann durchaus sehr lang werden, wenn Sie den Anwender mit vielen Filteroptionen verwöhnen wollen.


Dim strFilter As String = _
"Textdateien (*.txt)|*.txt| HTML-Dateien|*.htm;*.html|"
& "Bitmap-Dateien (*.bmp)|*.bmp|"
& "Ausführbare Dateien (*.exe)|*.exe|"
& "Word-Dokumente(*.doc)|*.doc|"
& "Alle Dateien (*.*)|*.*)"
dlgFileOpen.Filter = strFilter
dlgFileOpen.ShowDialog()

Manchmal möchte man auch mehrere Dateitypen gleichzeitig anzeigen lassen. Das ist beispielsweise der Fall, wenn Sie nach mehreren Bildformaten filtern wollen. Listen Sie dazu in der rechten Teilzeichenfolge alle gewünschten Dateiformate auf. Diese müssen durch ein Semikolon voneinander getrennt werden:


dlgFileOpen.Filter = "Alle Bilddateien|*.bmp;*.jpeg;*.gif"

Den anwendungsspezifischen Standardfilter festlegen

Normalerweise wird nach dem Öffnen des Dialogs der zuerst aufgeführte Filter im Kombinationslistenfeld angezeigt. Mit der Eigenschaft FilterIndex kann aber auch ein beliebiger aus der Liste gewählt werden:


dlgFileOpen.FilterIndex = 1

Entgegen den sonst üblichen Gepflogenheiten beginnt die Indizierung der Filter nicht mit dem Index 0, sondern mit dem Index 1. Sollen nach dem Öffnen des Dialogs beispielsweise nach den im angezeigten Verzeichnis befindlichen Word-Dokumenten gefiltert werden (siehe Codefragment oben), muss der Eigenschaft FilterIndex die Zahl 5 übergeben werden.


Galileo Computing

17.2.5 Die ausgewählte Datei  downtop

Sie wissen nun, wie Sie das Dialogfenster zum Öffnen einer Datei durch verschiedene Eigenschaften anforderungsgerecht gestalten können, aber der wichtigsten Eigenschaft des Dialogs OpenFileDialog haben wir bisher noch keine Beachtung geschenkt. Letztendlich ist es das Ziel, eine Datei auszuwählen und die Wahl im weiteren Programmcode zum tatsächlichen Öffnen der Datei zu verwenden. Die Eigenschaft, die uns den Dateinamen einschließlich der gesamten Pfadangabe liefert, ist FileName. Den Rückgabewert können wir als Übergabeargument bei der Instanziierung einer Klasse aus dem Namespace System.IO mit einem Konstruktor, der einen path-Parameter entgegennimmt, benutzen, z.  B.:


Dim dlgFileOpen As New OpenFileDialog
If dlgFileOpen.ShowDialog() = _
System.Windows.Forms.DialogResult.OK Then
Dim sr As StreamReader = _
New StreamReader(dlgFileOpen.FileName)
End If


Galileo Computing

17.2.6 Mehrfachauswahl von Dateien  downtop

Selten sind Dialoge zum Öffnen einer Datei anzutreffen, die eine Mehrfachauswahl zulassen. Wollen Sie in Ihrer Anwendung trotzdem mit dieser Besonderheit aufwarten, müssen Sie die Eigenschaft MultiSelect des Dialogs im Programmcode oder im Eigenschaftsfenster auf True setzen. Das Verhalten bei der Dateiauswahl entspricht dann dem eines Listenfeldes mit erweiterter Mehrfachauswahl.

Bei einer einfachen Auswahlmöglichkeit kann man den Pfad zu der zu öffnenden Datei über die Eigenschaft FileName abfragen, bei der Mehrfachauswahl steht mit FileNames eine ähnlich lautende Eigenschaft zur Verfügung, deren Rückgabewert ein Array vom Typ String ist:


Public ReadOnly Property FileNames As String()

Im Gegensatz zu FileName ist diese Eigenschaft schreibgeschützt.


Galileo Computing

17.2.7 Zusammenfassung der Eigenschaften und Methoden  downtop


Tabelle 17.2     Eigenschaften und Methoden der Klasse »OpenFileDialog«

Member Beschreibung
FileName Ruft eine Zeichenfolge ab, die den im Dialog ausgewählten Dateinamen enthält, oder legt diese fest.
FileNames Ruft die Dateinamen aller im Dialog ausgewählten Dateien ab.
Filter Legt die aktuelle Filterzeichenfolge für die Dateitypen fest, die im Kombinationslistenfeld Dateityp angeboten werden.
FilterIndex Ruft den Index des derzeit im Dialog ausgewählten Filters ab oder legt diesen fest.
InitialDirectory Ruft das Ausgangsverzeichnis ab, das im Dialog angezeigt wird, oder legt dieses fest.
MultiSelect Ruft einen Wert ab, der angibt, ob im Dialog mehrere Dateien ausgewählt werden können, oder legt diesen fest.
ShowHelp Ruft einen Wert ab, der angibt, ob im Dialog die Hilfeschaltfläche angezeigt wird, oder legt diesen fest.
ShowReadOnly Ruft einen Wert ab, der angibt, ob der Dialog ein Kontrollkästchen Schreibgeschützt Öffnen enthält, oder legt diesen fest.
Title Ruft die Titelleistenzeichenfolge des Dialogs ab oder legt diese fest.
ShowDialog (Methode) Zeigt das Standarddialogfeld an.


Galileo Computing

17.2.8 Ereignisse von »OpenFileDialog«  downtop

Nur zwei spezifische Ereignisse zeichnen das Dialogfeld aus. Zum einen können Sie in Verbindung mit dem Klicken auf die Schaltfläche OK einen Ereignishandler mit dem Ereignis FileOK verknüpfen. Anstatt die Rückgabe des Aufrufs der Methode ShowDialog auszuwerten, können Sie somit auch im Ereignishandler auf die Dateiauswahl im Dialog reagieren. Unter bestimmten Umständen ist das Auswerten des Ereignisses FileOk flexibler, denn der Ereignishandler empfängt ein Argument vom Typ CancelEventArgs, das uns erlaubt, über die Eigenschaft Cancel das Schließen des Dialogs zu verhindern. Dadurch wird es dem Anwender möglich, mehrere Dateien einzeln hintereinander auszuwählen, ohne dass der Dialog wiederholt geöffnet werden muss.

Das Ereignis HelpRequest setzt voraus, dass die Eigenschaft ShowHelp=True gesetzt ist und im Dialog eine Hilfe-Schaltfläche angezeigt wird. Ausgelöst wird dieses Ereignis durch Klicken dieser Schaltfläche.


Galileo Computing

17.2.9 Das Beispiel »Texteditor«  toptop

Im folgenden Beispiel wollen wir einen einfachen Texteditor entwickeln und für die allgemeinen Operationen zum Öffnen und Speichern Standarddialoge benutzen. Zunächst soll nur das Öffnen von Dateien implementiert werden. Später wird das Beispiel auch um die Speicherung der Dokumentinformationen ergänzt.

Die Form des Texteditors enthält eine Textbox, die auch dann den gesamten Clientbereich der Form ausfüllt, wenn die Form zur Laufzeit vergrößert oder verkleinert wird. Am einfachsten ist das zu realisieren, wenn die Eigenschaft Dock der Textbox auf DockStyle.Fill eingestellt wird. Das Formular enthält ein Menü mit dem Hauptmenüpunkt Datei und den Menüunterelementen Öffnen, Neu, Speichern, Speichern unter und Beenden.

Mit dem Erstellen eines Menüs werden wir uns in Kapitel 18 beschäftigen. Im Moment ist es für Sie nur wichtig zu wissen, dass ein Menüelement das Ereignis Click bereitstellt, das ausgelöst wird, sobald der Anwender einen Menüpunkt auswählt.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 17.3     Formular des Beispiels »TexteditorVers1«


' ----------------------------------------------------------
' Beispiel: ...\Kapitel 17\TexteditorVers1
' ----------------------------------------------------------
Imports System.IO
Public Class Form1
' Ereignishandler des Click-Ereignisses des Menüs "Öffnen"
Private Sub mnuOeffnen_Click(...) Handles mnuOeffnen.Click
' Standarddialog zum Öffnen anzeigen
Dim ofd As New OpenFileDialog
ofd.Filter = _
"Textdateien (*.txt)|*.txt|Alle Dateien (*.*)|*.*"
ofd.Title = "Öffnen einer Textdatei"
If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
' falls ein Fehler auftreten sollte, muss dieser behandelt werden
Try
Dim sr As StreamReader = New StreamReader(ofd.FileName)
txtDatei.Text = sr.ReadToEnd()
sr.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "Texteditor")
End Try
End If
End Sub
' Ereignishandler des Click-Ereignisses des Menüs "Beenden"
Private Sub mnuBeenden_Click(...) Handles mnuBeenden.Click
Dim strMeldung As String = "Wollen Sie die Anwendung beenden?"
Dim result As DialogResult = MessageBox.Show(strMeldung, _
Application.ProductName, _
MessageBoxButtons.OKCancel, _
MessageBoxIcon.Question, _
MessageBoxDefaultButton.Button2)
If result = Windows.Forms.DialogResult.OK Then
Application.Exit()
End If
End Sub
' Ereignishandler des Click-Ereignisses des Menüs "Neu"
Private Sub mnuNeu_Click(...) Handles mnuNeu.Click
txtDatei.Text = ""
End Sub
End Class

Im Zusammenhang mit dem Thema dieses Abschnitts ist der wichtigste Codeabschnitt der Dialog zum Öffnen einer Textdatei:


If ofd.ShowDialog() = Windows.Forms.DialogResult.OK Then
...
End If

Wie alle modalen Dialogfenster, liefert der Aufruf der Methode ShowDialog einen Rückgabewert vom Typ DialogResult. Wir müssen nur noch feststellen, welche Schaltfläche der Anwender im Dialog geklickt hat, denn nur mit der Bestätigung durch OK soll die markierte Datei auch geöffnet und im Textfenster angezeigt werden.

Eine Textdatei kann mit mehreren Klassen des Namespace System.IO realisiert werden. Im Beispiel wird die Klasse StreamReader eingesetzt und dem Konstruktor die Eigenschaft FileName des Dialogs zugewiesen. Die Methode ReadToEnd liest von der aktuellen Position des Dateizeigers bis zum Ende der Datei ein und berücksichtigt dabei auch Zeilenumbrüche innerhalb des Textes. Der eingelesene Dateiinhalt wird in der Textbox angezeigt und anschließend das StreamReader-Objekt ordnungsgemäß geschlossen.


Dim sr As StreamReader = New StreamReader(ofd.FileName)
txtDatei.Text = sr.ReadToEnd()
sr.Close()

Da insbesondere Dateioperationen schnell einen Fehler verursachen können, wird das Öffnen und Einlesen in einem Try-Anweisungblock eingeschlossen. Sollte eine Ausnahme auftreten, wird die Fehlermeldung in einem Meldungsfenster angezeigt.

 <<   zurück
  
  Zum Katalog
Zum Katalog: Visual Basic 2005
Visual Basic 2005
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Visual C# 2005






 Visual C# 2005


Zum Katalog: Fortgeschrittene Programmierung mit Visual C# 2005






 Fortgeschrittene
 Programmierung
 mit Visual C# 2005


Zum Katalog: Das Programmierhandbuch SQL Server 2005






 Das Programmier-
 handbuch
 SQL Server 2005


Zum Katalog: Einstieg in Visual Basic 2005






 Einstieg in
 Visual Basic 2005


Zum Katalog: Einstieg in Visual C# 2005






 Einstieg in
 Visual C# 2005


Zum Katalog: Konzepte und Lösungen für Microsoft-Netzwerke






 Konzepte und
 Lösungen für
 Microsoft-Netzwerke


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Galileo Press 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de